package com.xbai.spark.core.transform

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
  * 双Value类型交互算子
  * union(otherDataset) 算子
  *   作用：对源 RDD 和参数 RDD 求并集后返回一个新的 RDD
  * subtract (otherDataset) 算子
  *   作用：计算差的一种函数，去除两个 RDD 中相同的元素，不同的RDD将保留下来
  * intersection(otherDataset) 算子
  *   作用：对源RDD和参数RDD求交集后返回一个新的RDD
  * cartesian(otherDataset) 算子
  *   作用：笛卡尔积
  * zip(otherDataset) 算子
  *   作用：将两个 RDD 组合成 Key/Value 形式的 RDD,这里默认两个 RDD 的 partition 数量以及元素数量都相同，否则会抛出异常。
 *
  * @author xbai
  * @Date 2020/12/30
  */
object Spark14_Value_Operation {

  def main(args: Array[String]): Unit = {
    val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("value")
    val sc = new SparkContext(conf)

    val rdd1: RDD[Int] = sc.parallelize(1 to 5, 5)
    val rdd2: RDD[Int] = sc.parallelize(3 to 7, 5)

    rdd1.union(rdd2).collect().foreach(print)
    rdd1.subtract(rdd2).collect().foreach(print)
    rdd1.intersection(rdd2).collect().foreach(print)
    rdd1.cartesian(rdd2).collect().foreach(print)
    rdd1.zip(rdd2).collect().foreach(print)
  }
}
